#include <pthread.h>


// class Mutex
// {
// public:
//     Mutex(pthread_mutex_t* lock)    
//         :_lock(lock)
//     {
//         pthread_mutex_init(_lock, nullptr);
//     }

//     void Lock()
//     {
//         pthread_mutex_lock(_lock);
//     }

//     void Unlock()
//     {
//         pthread_mutex_unlock(_lock);
//     }


//     ~Mutex()
//     {
//         pthread_mutex_destroy(_lock);
//     }
// private:
//     pthread_mutex_t* _lock;
// };



class Mutex
{
private:
    void Lock()
    {
        pthread_mutex_lock(_lock);
    }

    void Unlock()
    {
        pthread_mutex_unlock(_lock);
    }

public:
    Mutex(pthread_mutex_t* lock)    
        :_lock(lock)
    {
        Lock();
    }

    ~Mutex()
    {
        Unlock();
    }
private:
    pthread_mutex_t* _lock;
};